class Animal {
  // 静态属性
  static animalColor = 'white'
  constructor(name, age) {
    this.name = name
    this.age = age
    console.log('Animal构造器');
  }
  // 静态方法
  static animalFun () {
    console.log('Animal的静态方法');
  }
  // 实例方法
  animalFun () {
    console.log('Animal的实例方法');
  }
}

class Dog extends Animal {
  constructor(name, age, weight) {
    super(name, age)
    this.weight = weight
    console.log('Dog的构造器');
  }
}

// 实例方法属性的继承
// 子类原型对象继承父类原型对象
let dog = new Dog('金毛', 1, 30);
console.log(dog);
dog.animalFun()
console.log(dog.__proto__.__proto__ === Animal.prototype);

// 静态方法属性的继承
// 子类的构造函数继承父类的构造函数
// 子类构造函数的原型对象指向父类构造函数
// console.log(Dog.animalColor);
// Dog.animalFun();
// console.log(Dog.__proto__ === Animal);